home *** CD-ROM | disk | FTP | other *** search
/ Aminet 20 / Aminet 20 (1997)(GTI - Schatztruhe)[!][Aug 1997].iso / Aminet / dev / asm / Bin2Asm.lha / Bin2Asm.c < prev    next >
C/C++ Source or Header  |  1995-09-04  |  3KB  |  147 lines

  1. /**************************************************************************/
  2. /*                                                                        */
  3. /*   Binary to Assembler sourse                               ver 1.0     */
  4. /*                                                                        */
  5. /*   By Obrezan Artem                                       17 june 1997  */
  6. /*   (e-mail: artem@cdi.surbis.ru)                                        */
  7. /*                                                                        */
  8. /*                         This version are for AMiGA!                    */
  9. /*                                                                        */
  10. /**************************************************************************/
  11.  
  12. #include <stdio.h>
  13. #include <string.h>
  14.  
  15. int endfile;
  16. unsigned int t,c;
  17. int line,counter,bwl;
  18. FILE *infile,*outfile;
  19.  
  20. static char *mnemonics[3] = { "DC.B", "DC.W", "DC.L" };
  21.  
  22. unsigned char grabbyte()
  23. {
  24.   t=c;
  25.   if (endfile) t=0;
  26.   endfile = ((c=getc(infile))==EOF);
  27.   return t;
  28. }
  29.  
  30. unsigned int grabword()
  31. {
  32.   return ( grabbyte()<<8 | grabbyte() );
  33. }
  34.  
  35. unsigned long grablong()
  36. {
  37.   return ( grabword()<<16 | grabword() );
  38. }
  39.  
  40. int help()
  41. {
  42.  printf("Usage:\n");
  43.  printf(" Bin2Asm <inputfile> <outputfile> [<b|w|l>] [<\%%d>] \n");
  44.  printf("         b|w|l = byte|word|long \n");
  45.  printf("         \%%d    = how much bytes|words|longs in line \n\n");
  46.  printf("-> Artem Obrezan (e-mail: artem@cdi.surbis.ru)  17 june 1997 <-\n\n");
  47.  
  48.  exit();
  49.  return 1; /* ;-) */
  50. }
  51.  
  52.  
  53. main(argc,argv)
  54. int argc;
  55. char *argv[];
  56. {
  57.   printf("\n*** Bin2Asm ***\n");
  58.  
  59.   if ((argc==2)&&(strcmp(argv[1],"/?")==0)) help();
  60.   
  61.   if (argc<3){
  62.    printf("\n Usage: Bin2Asm <inputfile> <outputfile>");
  63.    printf("\n Type /? for more info...\n\n");
  64.    exit(1);
  65.   }
  66.  
  67.  
  68.   line=8; bwl=0; 
  69.  
  70.   if ( (infile = fopen(argv[1],"r")) == NULL) {
  71.    printf("\n Couldn't open file for input.\n");
  72.    exit(2);
  73.   }
  74.   if ( (outfile = fopen(argv[2],"w")) == NULL) {
  75.    printf("\n Couldn't open file for output.\n");
  76.    exit(3);
  77.   }
  78.  
  79.   if ((argc=4)||(argc<5)){
  80.    switch (*argv[3]){
  81.     case 'b': 
  82.     case 'B':
  83.               bwl = 0;
  84.              break;
  85.     case 'w':
  86.     case 'W':
  87.               bwl = 1;
  88.             break;
  89.     case 'l':
  90.     case 'L':
  91.             bwl = 2;
  92.             break;
  93.    }
  94.   }
  95.   if (argc<=5){
  96.     sscanf(argv[4],"%d",&line);
  97.     if(line<=0)line=1;
  98.   }
  99.   line--;  
  100.  
  101.   fprintf (outfile,"; %s \n\n",argv[1]);
  102.  
  103.   grabbyte();
  104.  
  105.   endfile = 0;
  106.   counter = 0;
  107.  
  108.   /* =================================================================== */
  109.  
  110.   while (!endfile){
  111.   
  112.    if (counter == 0) {
  113.     fprintf(outfile,"         %s ",mnemonics[bwl]);
  114.    }
  115.    switch(bwl){
  116.     case 0: fprintf(outfile,"$%02x",grabbyte());
  117.           break;
  118.     case 1: fprintf(outfile,"$%04x",grabword());
  119.           break;
  120.     case 2: fprintf(outfile,"$%08x",grablong());
  121.           break;
  122.    }
  123.    if ( (++counter > line)||(endfile) ) 
  124.     {
  125.      counter =0;
  126.      fprintf(outfile," \n");
  127.     }
  128.    else 
  129.      fprintf(outfile,", "); 
  130.   }
  131.  
  132.  /* ==================================================================== */
  133.  
  134.   printf("Done.\n");
  135.   exit();
  136. }
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.